// 接口类型 : interface
// 只是用于定义对象类型
// interface 名字 {属性名:类型;属性2:类型}
// {
//     "docId": "string",
//     "orderId": "string",
//     "score": 0,
//     "content": "string",
//     "anonymousFlag": 0
// }

interface Ixxx {
  docId: string
  orderId: string
  score: number
  content: string
  anonymousFlag: number
}

const xxx: Ixxx = {
  docId: 'string',
  orderId: 'string',
  score: 0,
  content: 'string',
  anonymousFlag: 0
}

// 补充 了解
interface ImesFn {
  (): void // 在对象中定义一个没有名字的方法
  success?: () => void
}

const mesFn: ImesFn = () => {}
// mesFn.success = () => {}

// interface 继承特性
// interface 名字  extends 其它的interface类型 {...}
// {x:0,y:0}
// {x:1,y:1,z:1}
interface Point2D {
  x: number
  y: number
}
// interface Point3D {
//   x: number
//   y: number
//   z: number
// }
interface Point3D extends Point2D {
  z: number
}
const p3d: Point3D = { x: 1, y: 1, z: 1 }

// type 实现继承:&  类型a & 类型b
type T2d = {
  x: number
  y: number
}
type T3d = T2d & { z: number }
const x3d: T3d = { x: 1, y: 1, z: 1 }

// interface 可以重复定义，它的重复定义是累加
interface P1 {
  a: number
}
interface P1 {
  b: number
}
const xP1: P1 = { a: 1, b: 2 }

// type Tx1 = { a: number }
// type Tx1 = { b: number }

// 如果某数据定义完希望别人可更改 优先考虑 interface 不希望别人更改  优先用 type

/*
 interface与type区别
   他们都可以定义对象数据类型
   区别：
     a:继承
        interface可以利用extends做继承使用，但type借助&处理继承
     b:重复定义
        interface重复定义，它会累加
        type重复定义，报错
    c:interface只能定义对象类型，type可定义所有类型
*/

export {}
